﻿using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SW_SoftBully.Controllers;
using SW_SoftBully.Models.ModuloAdministracion.Edificio;
using System.Data.SqlClient;
using log4net;

namespace SW_SoftBully.Models.ModuloAdministracion.Edificio
{
    public class EdificioDAO
    {
        public string RegistrarEdificio(EdificioBean edificio)
        {
            try{
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "INSERT INTO Edificio (Id_Provincia, Id_Departamento, Num_Pisos, Num_Sotanos, Nombre, Id_Distrito, Direccion, Telefono, Id_Banco, cuenta_ahorros, contometro, tipo_prorrateo, ganancia, pago_inmobiliaria, caja_chica, estado) " +
                                       " VALUES (" + edificio.Id_Provincia + "," + edificio.Id_Departamento + "," + edificio.Num_Pisos + "," + edificio.Num_Sotanos + ",'" + edificio.Nombre + "'," + edificio.Id_Distrito + ",'" + edificio.Direccion + "','" + edificio.Telefono + "'," + edificio.Id_Banco + ",'" + edificio.Cuenta + "'," + edificio.Contometro + ",'" + edificio.Tipo_Prorrateo + "'," + edificio.Ganancia + "," + edificio.Pago_Inmobiliaria + "," + edificio.Caja_Chica + ",1)"; 

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                edificio.conexion = "Bien";
            }
            catch (Exception e){
                String men = e.ToString();
                edificio.conexion = men;
            }


            return edificio.conexion;
        }

        public Boolean ExisteEdificio(EdificioBean edificio)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT * FROM Edificio WHERE nombre = '" + edificio.Nombre + "' AND estado = 1";


                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                if (dataReader.Read())
                {
                    dataReader.Close();
                    sqlCon.Close();
                    return true;
                }
                else
                {
                    sqlCon.Close();
                    dataReader.Close();
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }

        public List<EdificioBean> ListarEdificio(EdificioBean edificio)
        {
            
            try
            {
                List<EdificioBean> listaedificio = new List<EdificioBean>();

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT * FROM Edificio WHERE estado = 1";

                System.Diagnostics.Debug.WriteLine("---------->"+edificio.Contometro);

                if (!string.IsNullOrEmpty(edificio.Nombre)) {
                    commandString += " AND nombre LIKE '%" + edificio.Nombre + "%'";
                }
                if (edificio.Id_Departamento > 0) {
                    commandString += " AND Id_Departamento = " + edificio.Id_Departamento + "";
                }
                if (edificio.Id_Provincia > 0)
                {
                    commandString += " AND Id_Provincia = " + edificio.Id_Provincia + "";
                }
                if (edificio.Id_Distrito > 0)
                {
                    commandString += " AND Id_Distrito = " + edificio.Id_Distrito + "";
                }
                if (!string.IsNullOrEmpty(edificio.Direccion)) {
                    commandString += " AND direccion LIKE '%" + edificio.Direccion + "%'";
                }
                if (!string.IsNullOrEmpty(edificio.Telefono)) {
                    commandString += " AND telefono LIKE '%" + edificio.Telefono + "%'";
                }
                if (edificio.Contometro > 0) { 
                    commandString += " AND Contometro = " + edificio.Contometro +"";
                }
                
                if (!string.IsNullOrEmpty(edificio.Tipo_Prorrateo)) {
                    commandString += " AND Tipo_Prorrateo = '" + edificio.Tipo_Prorrateo + "'";
                }

                if (edificio.Id_Banco > 0) {
                    commandString += " AND Id_Banco = " + edificio.Id_Banco + "";
                }

                if (!string.IsNullOrEmpty(edificio.Cuenta)) {
                    commandString += " AND cuenta_ahorros LIKE '%" + edificio.Cuenta + "%'";
                }

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read()) {
                        EdificioBean Edificio = new EdificioBean();
                        Edificio.Id_Edificio = Convert.ToInt32(dataReader["Id_Edificio"]);
                        Edificio.Nombre = Convert.ToString(dataReader["Nombre"]);
                        Edificio.Id_Departamento = Convert.ToInt32(dataReader["Id_Departamento"]);
                        Edificio.Id_Provincia = Convert.ToInt32(dataReader["Id_Provincia"]);
                        Edificio.Id_Distrito = Convert.ToInt32(dataReader["Id_Distrito"]);
                        Edificio.Direccion = Convert.ToString(dataReader["Direccion"]);
                        Edificio.Telefono = Convert.ToString(dataReader["Telefono"]);
                        Edificio.Id_Banco = Convert.ToInt32(dataReader["Id_Banco"]);
                        Edificio.Cuenta = Convert.ToString(dataReader["cuenta_ahorros"]);
                        Edificio.Contometro = Convert.ToInt32(dataReader["Contometro"]);
                        Edificio.Tipo_Prorrateo = Convert.ToString(dataReader["Tipo_Prorrateo"]);
                        Edificio.Ganancia = Convert.ToDouble(dataReader["Ganancia"]);
                        Edificio.Pago_Inmobiliaria = Convert.ToDouble(dataReader["Pago_Inmobiliaria"]);
                        Edificio.Caja_Chica = Convert.ToDouble(dataReader["Caja_Chica"]);
                        Edificio.Estado = Convert.ToInt32(dataReader["estado"]);
                        Edificio.Num_Pisos = Convert.ToInt32(dataReader["Num_Pisos"]);
                        Edificio.Num_Sotanos = Convert.ToInt32(dataReader["Num_Sotanos"]);
                        listaedificio.Add(Edificio);
                }
                dataReader.Close();
                sqlCon.Close();

                return listaedificio;
            }
            catch (Exception e)
            {
                String men = e.ToString();
                edificio.conexion = men;
                return null;
            }            
        }

        public string ModificarEdificio(EdificioBean edificio)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "UPDATE Edificio SET " + 
                                       "Nombre = '" + edificio.Nombre + "', " +
                                       "Id_Departamento = " + edificio.Id_Departamento + ", " +
                                       "Id_Provincia = " + edificio.Id_Provincia + ", " +
                                       "Id_Distrito = " + edificio.Id_Distrito + ", " + 
                                       "Direccion = '"+ edificio.Direccion + "' , " + 
                                       "Telefono = '" + edificio.Telefono + "', " +
                                       "Id_Banco = " + edificio.Id_Banco + ", " +
                                       "Num_Pisos = " + edificio.Num_Pisos + ", " +
                                       "Num_Sotanos =" + edificio.Num_Sotanos + ", " + 
                                       "cuenta_ahorros = '" + edificio.Cuenta + "', " +
                                       "Contometro = " + edificio.Contometro + ", " +
                                       "Tipo_Prorrateo = '" + edificio.Tipo_Prorrateo + "', " +
                                       "Ganancia = " + edificio.Ganancia + ", " +
                                       "Pago_Inmobiliaria = " + edificio.Pago_Inmobiliaria + ", " +
                                       "Caja_Chica = " + edificio.Caja_Chica + " " +
                                       "WHERE Id_Edificio = " + edificio.Id_Edificio + "";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                edificio.conexion = "Bien";

            }
            catch (Exception e) {
                String men = e.ToString();
                edificio.conexion = men;
            }
            return edificio.conexion;
        }

        public string EliminarEdificio(EdificioBean edificio)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "UPDATE Edificio SET Estado = 0 WHERE Id_Edificio = " + edificio.Id_Edificio + "";
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                edificio.conexion = "Bien";
            }
            catch (Exception e) {
                String men = e.ToString();
                edificio.conexion = men;
            }
            return edificio.conexion;
        }

        public List<int> ListarPiso(EdificioBean edificio)
        {
            try
            {
                List<int> listapiso = new List<int>();

                int num_pisos, num_sotanos;

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT num_pisos,num_sotanos FROM Edificio WHERE id_edificio = " + edificio.Id_Edificio + "";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    num_pisos = Convert.ToInt32(dataReader["Num_Pisos"]);
                    num_sotanos = Convert.ToInt32(dataReader["Num_Sotanos"]);
                    listapiso.Add(num_pisos);
                    listapiso.Add(num_sotanos);
                }

                dataReader.Close();
                sqlCon.Close();

                return listapiso;

            }
            catch (Exception e) {
                String men = e.ToString();
                edificio.conexion = men;
                return null;
            }
        }

        public EdificioBean AtributosEdificio(EdificioBean edificio)
        {
            try
            {

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT * FROM Edificio WHERE Id_Edificio = " + edificio.Id_Edificio + "";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();
                EdificioBean Edificio = new EdificioBean();
                 
                while (dataReader.Read())
                {
                    
                    Edificio.Id_Edificio = Convert.ToInt32(dataReader["Id_Edificio"]);
                    Edificio.Nombre = Convert.ToString(dataReader["Nombre"]);
                    Edificio.Id_Departamento = Convert.ToInt32(dataReader["Id_Departamento"]);
                    Edificio.Id_Provincia = Convert.ToInt32(dataReader["Id_Provincia"]);
                    Edificio.Id_Distrito = Convert.ToInt32(dataReader["Id_Distrito"]);
                    Edificio.Direccion = Convert.ToString(dataReader["Direccion"]);
                    Edificio.Telefono = Convert.ToString(dataReader["Telefono"]);
                    Edificio.Id_Banco = Convert.ToInt32(dataReader["Id_Banco"]);
                    Edificio.Cuenta = Convert.ToString(dataReader["cuenta_ahorros"]);
                    Edificio.Contometro = Convert.ToInt32(dataReader["Contometro"]);
                    Edificio.Tipo_Prorrateo = Convert.ToString(dataReader["Tipo_Prorrateo"]);
                    Edificio.Ganancia = Convert.ToDouble(dataReader["Ganancia"]);
                    Edificio.Pago_Inmobiliaria = Convert.ToDouble(dataReader["Pago_Inmobiliaria"]);
                    Edificio.Caja_Chica = Convert.ToDouble(dataReader["Caja_Chica"]);
                    Edificio.Estado = Convert.ToInt32(dataReader["estado"]);
                    Edificio.Num_Pisos = Convert.ToInt32(dataReader["Num_Pisos"]);
                    Edificio.Num_Sotanos = Convert.ToInt32(dataReader["Num_Sotanos"]);
                    
                }
                dataReader.Close();
                sqlCon.Close();

                return Edificio;
            }
            catch (Exception e)
            {
                String men = e.ToString();
                edificio.conexion = men;
                return null;
            } 
        }
    }
}